تسمح لك عبارات SQL ANY وALL بإجراء مقارنات بين قيمة عمود واحد ونطاق من القيم الأخرى.
ANY عامل التشغيل:
ANY يعني أن الشرط سيكون صحيحًا إذا كانت العملية صحيحة لأي من القيم الموجودة في النطاق.
SELECT column_name(s)
FROM table_name
WHERE column_name operator ANY
(SELECT column_name
FROM table_name
WHERE condition)
عامل التشغيل ALL:
ALL يعني أن الشرط سيكون صحيحًا فقط إذا كانت العملية صحيحة لجميع القيم الموجودة في النطاق.
SELECT ALL column_name(s)
FROM table_name
WHERE condition
SELECT column_name(s)
FROM table_name
WHERE column_name operator ALL
(SELECT column_name
FROM table_name
WHERE condition)
ما يلي هو نموذج من الجدول "Products" ("المنتجات") لقاعدة البيانات "Northwind":
ProductID | ProductName | SupplierID | CategoryID | Unit | Price |
---|---|---|---|---|---|
1 | Chais | 1 | 1 | 10 boxes x 20 bags | 18.00 |
2 | Chang | 1 | 1 | 24 - 12 oz bottles | 19.00 |
3 | Aniseed Syrup | 1 | 2 | 12 - 550 ml bottles | 10.00 |
4 | Chef Anton's Cajun Seasoning | 2 | 2 | 48 - 6 oz jars | 22.00 |
5 | Chef Anton's Gumbo Mix | 2 | 2 | 36 boxes | 21.35 |
6 | Grandma's Boysenberry Spread | 3 | 2 | 12 - 8 oz jars | 25.00 |
7 | Uncle Bob's Organic Dried Pears | 3 | 7 | 12 - 1 lb pkgs. | 30.00 |
8 | Northwoods Cranberry Sauce | 3 | 2 | 12 - 12 oz jars | 40.00 |
9 | Mishi Kobe Niku | 4 | 6 | 18 - 500 g pkgs. | 97.00 |
10 | Ikura | 4 | 8 | 12 - 200 ml jars | 31.00 |
والعينة من الجدول "OrderDetails" ("تفاصيل الطلب"):
OrderDetailID | OrderID | ProductID | Quantity |
---|---|---|---|
1 | 10248 | 11 | 12 |
2 | 10248 | 42 | 10 |
3 | 10248 | 72 | 5 |
4 | 10249 | 14 | 9 |
5 | 10249 | 51 | 40 |
6 | 10250 | 41 | 10 |
7 | 10250 | 51 | 35 |
8 | 10250 | 65 | 15 |
9 | 10251 | 22 | 6 |
10 | 10251 | 57 | 15 |
يسرد استعلام SQL التالي ProductName إذا وجد أي سجل (ANY) في الجدول OrderDetails بقيمة Quantity تساوي 10 (سيرجع هذا TRUE لأن العمود Quantity يحتوي على بعض القيم 10):
Run SQLSELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity = 10)
يسرد استعلام SQL التالي ProductName إذا وجد أي سجل (ANY) في الجدول OrderDetails بكمية أكبر من 99 (سيؤدي هذا إلى إرجاع TRUE لأن العمود Quantity يحتوي على بعض القيم أكبر من 99):
Run SQLSELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity > 99)
تسرد عبارة SQL أخرى ProductName إذا وجدت أي سجل (ANY) في جدول OrderDetails بكمية أكبر من 1000 (سيؤدي هذا إلى إرجاع FALSE لأن عمود Quantity لا يحتوي على قيم أكبر من 1000):
Run SQLSELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity > 1000)
تسرد عبارة SQL التالية جميع أسماء المنتجات (ALL):
Run SQLSELECT ALL ProductName
FROM Products
WHERE TRUE
تسرد عبارة SQL التالية ProductName إذا كانت كافة السجلات (ALL) في الجدول OrderDetails تحتوي على عدد يساوي 10. بالطبع سيُرجع هذا FALSE لأن العمود Quantity يحتوي على العديد من القيم المختلفة (وليس فقط القيمة 10):
Run SQLSELECT ProductName
FROM Products
WHERE ProductID = ALL
(SELECT ProductID
FROM OrderDetails
WHERE Quantity = 10)